/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.bettosimport.datos;

import com.bettosimport.entidades.Comprobante_compra;
import com.bettosimport.entidades.Detalle_compra;
import com.bettosimport.entidades.Empleado;
import com.bettosimport.entidades.Producto;
import com.bettosimport.entidades.Proveedor;
import com.bettosimport.entidades.Tipo_comprobante;
import com.bettosimport.entidades.Usuario;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author Programador
 */
public class ComprobanteCompraDAO {

    private static ComprobanteCompraDAO _Instancia;

    private ComprobanteCompraDAO() {
    }

    public static ComprobanteCompraDAO Instancia() {
        if (_Instancia == null) {
            _Instancia = new ComprobanteCompraDAO();
        }
        return _Instancia;
    }

    public ArrayList<Comprobante_compra> listarComprobanteCompra() throws Exception {
        ArrayList<Comprobante_compra> compcompra;
        Connection cn = null;
        try {
            compcompra = new ArrayList<>();
            cn = ConexionDAO.Instancia().getConexion();
            CallableStatement cs = cn.prepareCall("{call sp_listarComprobanteCompra()}");
            ResultSet rs = cs.executeQuery();
            while (rs.next()) {
                Comprobante_compra cc = new Comprobante_compra();
                Usuario u = new Usuario();
                Empleado e = new Empleado();
                Tipo_comprobante tc = new Tipo_comprobante();
                Proveedor p = new Proveedor();

                e.setNom_emp(rs.getString("nom_emp"));
                e.setApe_emp(rs.getString("ape_emp"));
                u.setEmpleado(e);
                tc.setDesc_tipocomp(rs.getString("desc_tipocomp"));
                p.setNom_prov(rs.getString("nom_prov"));
                p.setRuc_prov(rs.getString("ruc_prov"));

                cc.setId_comp(rs.getString("id_comp"));
                cc.setSerie(rs.getString("serie"));
                cc.setNumero(rs.getString("numero"));
                cc.setFecha(rs.getString("fecha"));
                cc.setSub_total(rs.getDouble("sub_total"));
                cc.setMonto_igv(rs.getDouble("monto_igv"));
                cc.setTotal(rs.getDouble("total"));
                cc.setProveedor(p);
                cc.setUsuario(u);
                compcompra.add(cc);
            }
            return compcompra;
        } catch (Exception e) {
            throw e;
        } finally {
            cn.close();
        }
    }

    public ArrayList<Detalle_compra> listarDetalleCompra(String cod) throws Exception {
        ArrayList<Detalle_compra> detcompra;
        Connection cn = null;
        try {
            detcompra = new ArrayList<>();
            cn = ConexionDAO.Instancia().getConexion();
            CallableStatement cs = cn.prepareCall("{call sp_listarDetalleCompra(?)}");
            cs.setString(1, cod);
            ResultSet rs = cs.executeQuery();
            while (rs.next()) {
                Detalle_compra dc = new Detalle_compra();
                Producto p = new Producto();
                p.setDesc_prod(rs.getString("desc_prod"));
                dc.setComprobantecompra_id(rs.getString("comprobantecompra_id"));
                dc.setProducto(p);
                dc.setCantidad(rs.getInt("cantidad"));
                dc.setPrecio(rs.getDouble("precio"));
                dc.setImporte(rs.getDouble("importe"));
                detcompra.add(dc);
            }
            return detcompra;
        } catch (Exception e) {
            throw e;
        } finally {
            cn.close();
        }
    }

    public int guardarCompra(String cadXML) throws Exception {
        Connection cn = null;
        try {
            cn = ConexionDAO.Instancia().getConexion();
            CallableStatement cs = cn.prepareCall("{call sp_guardarCompra(?)}");
            cs.setString(1, cadXML);
            int valor = cs.executeUpdate();
            return valor;
        } catch (Exception e) {
            throw e;
        } finally {
            cn.close();
        }
    }
}
